<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>长轮询和短轮询</title>
</head>

<body>
    <script>
        /**
         * 短轮询
         * ajax轮询是什么？怎么实现？

            所谓轮询(polling)其实是客户端按规定时间定时向服务端发送ajax请求，服务器接到请求后马上返回响应信息并关闭连接。

            ajax轮询需要服务器有很快的处理速度与快速响应。
        */
        function setTimer() {
            let timer = setTimeout(() => {
                axios.post(url, params).then(res => {
                    if (res) {//根据返回状态判断
                        clearTimeout(timer);//清理定时任务
                    }
                })
            }, 2000)//2秒查一下


        }
        /**
         * 长轮询。
         * ajax实现:在发送ajax后,服务器端会阻塞请求直到有数据传递或超时才返回。
         *  客户端JavaScript响应处理函数会在处理完服务器返回的信息后，再次发出请求，客户端再次建立连接，周而复始。
        */
        function setTimer() {
            axios.post(url, params).then(res => {
                if (!res) {
                    // 不成功
                    this.setTimer()
                } else {
                    //成功啦
                }
            })
        }
        //当觉得长短轮询不合适的话也可以考虑长连接，websocket
    </script>
</body>

</html>